package com.example.shutdown_v1.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 传感器数据包（解析后的数据）
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SensorDataPacket {
    
    /**
     * 设备MAC地址（设备标识）
     */
    private String mac;
    
    /**
     * 包类型（0x11=测量数据）
     */
    private byte packetType;
    
    /**
     * 订阅标识（16位）
     */
    private int subscriptionId;
    
    /**
     * 时间戳（毫秒）
     */
    private long timestamp;
    
    // ==================== 欧拉角（核心数据）====================
    
    /**
     * 俯仰角 Pitch（度）
     */
    private Double pitch;
    
    /**
     * 横滚角 Roll（度）
     */
    private Double roll;
    
    /**
     * 航向角 Yaw（度）
     */
    private Double yaw;
    
    // ==================== 欧拉角圈数（多圈检测）====================
    
    /**
     * 横滚角圈数 Roll Turn Count
     */
    private Double rollTurnCount;
    
    /**
     * 航向角圈数 Yaw Turn Count
     */
    private Double yawTurnCount;
    
    /**
     * 综合圈数 Composite Rotation Count
     * 计算公式：rollTurnCount + yawTurnCount
     */
    private Double compositeRotationCount;
    
    // ==================== 含重力加速度（备用数据）====================
    
    /**
     * X轴加速度（含重力）m/s²
     */
    private Double accelX;
    
    /**
     * Y轴加速度（含重力）m/s²
     */
    private Double accelY;
    
    /**
     * Z轴加速度（含重力）m/s²
     */
    private Double accelZ;
    
    // ==================== 角速度（辅助数据）====================
    
    /**
     * X轴角速度（度/秒）
     */
    private Double gyroX;
    
    /**
     * Y轴角速度（度/秒）
     */
    private Double gyroY;
    
    /**
     * Z轴角速度（度/秒）
     */
    private Double gyroZ;
    
    /**
     * 是否在旋转（根据角速度判断）
     */
    private Boolean isRotating;
    
    // ==================== 信号数据 ====================
    
    /**
     * 信号强度 RSSI（dBm，负数，如-46表示信号强度为46dBm）
     */
    private Integer rssi;
    
    /**
     * 原始十六进制数据（用于调试）
     */
    private String rawHexData;
    
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("SensorDataPacket{\n");
        sb.append("  MAC=").append(mac).append("\n");
        sb.append("  订阅标识=0x").append(Integer.toHexString(subscriptionId).toUpperCase()).append("\n");
        sb.append("  时间戳=").append(timestamp).append(" ms\n");
        
        if (pitch != null && roll != null && yaw != null) {
            sb.append("  欧拉角: Pitch=").append(String.format("%.3f", pitch))
              .append("°, Roll=").append(String.format("%.3f", roll))
              .append("°, Yaw=").append(String.format("%.3f", yaw)).append("°\n");
        }
        
        if (accelX != null && accelY != null && accelZ != null) {
            sb.append("  加速度: X=").append(String.format("%.4f", accelX))
              .append(", Y=").append(String.format("%.4f", accelY))
              .append(", Z=").append(String.format("%.4f", accelZ)).append(" m/s²\n");
        }
        
        if (gyroX != null && gyroY != null && gyroZ != null) {
            sb.append("  角速度: X=").append(String.format("%.2f", gyroX))
              .append(", Y=").append(String.format("%.2f", gyroY))
              .append(", Z=").append(String.format("%.2f", gyroZ)).append(" °/s\n");
        }
        
        sb.append("}");
        return sb.toString();
    }
}

